-- 基于Lua脚本，判断秒杀库存、一人一单，决定用户是否抢购成功
-- 参数列表：优惠券id，用户id
local voucherId = ARGV[1];
local userId = ARGV[2];
--local orderId = ARGV[3];

-- 数据key
local stockKey = 'seckill:stock:' .. voucherId;
local orderKey = 'seckill:order:' .. voucherId;

-- 脚本业务
-- 判断库存是否充足
local stock = tonumber(redis.call('get', stockKey))
--redis.call('rpush', 'debug:log', 'Checking stock for voucher ' .. voucherId .. ': ' .. stock)
if stock <= 0 then
    -- 库存不足返回1
    return 1;
end

-- 判断用户是否下单
if redis.call('sismember', orderKey, userId) == 1 then
    -- 存在，说明重复下单，返回2
    return 2;
end
-- 3.4.扣库存 incrby stockKey -1
redis.call('incrby', stockKey, -1)
-- 3.5.下单（保存用户）sadd orderKey userId
redis.call('sadd', orderKey, userId)
-- 3.6.发送消息到队列中， XADD stream.orders * k1 v1 k2 v2 ...
--redis.call('xadd', 'stream.orders', '*', 'userId', userId, 'voucherId', voucherId, 'id', orderId)
return 0
